#include <dretve.h>

//stvori novu dretvu koja ce radit funkciju "poc_funkc(param)"
int stvori_dretvu_pr (void (*poc_funkc)(void *), void *param, void *stog,
			int prio, int rasp)
{
	parametri_dretve_t p;
	
	p.poc_funkc = poc_funkc;
	p.param = param;
	p.stog = stog;
	p.prio = prio;
	p.rasp = rasp;
	
	return j_funkcija(STVORI_DRETVU, &p);
}

//stvori novu dretvu koja ce radit funkciju "poc_funkc(param)"
int stvori_dretvu (void (*poc_funkc)(void *), void *param)
{
	return stvori_dretvu_pr(poc_funkc, param, NULL,	PRIO_POCETNI, RASP_PRP);
}


//propusta procesor iducoj dretvi, ako takva postoji
//vraca 0, ako je odstupila, 1 ako nije (npr. nema drugih dretvi)
int dretva_odstupi ()
{
	return j_funkcija(DRETVA_ODSTUPI, NULL);
}

//poziva se kada dretva zeli prije zavrsiti
int zavrsi_dretvu ()
{
	return j_funkcija(DRETVA_ZAVRSETAK, NULL);
}

//vrati 'id' trenutne dretve
int id_dretve ()
{
	return j_funkcija(ID_DRETVE, NULL);
}

//prioriteti
//dohvati prioritet dretve s "id", ili pozivajuce, ako je id = 0
int dohvati_prioritet (int id)
{
	return j_funkcija(DOHVATI_PRIORITET, &id);
}

int postavi_prioritet (int prio)
{
	return j_funkcija(POSTAVI_PRIORITET, &prio);
}

int cekaj_kraj_dretve (int id)
{
	return j_funkcija(CEKAJ_KRAJ_DRETVE, &id);
}


//semafor
int dohvati_sem (int pocvr)
{
	return j_funkcija(DOHVATI_SEM, &pocvr);
}
int obrisi_sem (int id)
{
	return j_funkcija(OBRISI_SEM, &id);
}

int cekaj_sem (int id)
{
	return j_funkcija(CEKAJ_SEM, &id);
}
int postavi_sem (int id)
{
	return j_funkcija(POSTAVI_SEM, &id);
}

